package com.anysoft.controller;

import com.anysoft.model.FileDomain;
import com.anysoft.model.MultiFileDomain;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.List;

@Controller
@RequestMapping("/fileupload")
public class FileUploadController {
    // 得到一个用来记录日志的对象，这样在打印信息时能够标记打印的是哪个类的信息
    private static final Log logger = LogFactory.getLog(FileUploadController.class);

    @RequestMapping("/onefileuploadpage")
    public String oneFileUploadPage() {
        return "oneFile";
    }

    // 单文件上传
    @RequestMapping("/onefile")
    public String oneFileUpload(@ModelAttribute FileDomain fileDomain, HttpServletRequest request) {
        /*
         * 文件上传到服务器的位置“/uploadfiles”,该位置是指
         * workspace\.metadata\.plugins\org.eclipse
         * .wst.server.core\tmp0\wtpwebapps, 发布后使用
         */
        // 自己测试发现这个request.getServletContext()实际是target文件夹下的Artifacts名也就是DouyinCPSWithSSM
        // 而request.getServletContext()指的应该就是部署项目的根目录，由于开发时使用的是local Tomcat，所以部署的项目就是
        // IDEA编译构建输出的target文件夹，下面的语句得出target/uploadfiles路径
        String realPath = request.getServletContext().getRealPath("uploadfiles");
        String fileName = fileDomain.getMyfile().getOriginalFilename();
        File targetFile = new File(realPath, fileName);
        if (!targetFile.exists()) {
            // 除了mkdirs方法还有mkdir方法，但是两者的区别是后者只能在已存在的父文件夹中创建新目录，如果父文件夹不存在则不能创建；
            // 前者是父文件夹如果不存在则创建完整路径的父文件夹，父文件夹如果存在则直接创建在父文件夹中创建新目录
            targetFile.mkdirs();
        }

        try {
            fileDomain.getMyfile().transferTo(targetFile);
            logger.info("成功");
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return "showOne";
    }

    @RequestMapping("/multifileuploadpage")
    public String multiFileUploadPage() {
        return "multiFiles";
    }

    // 多文件上传
    @RequestMapping("/multifile")
    public String multiFileUpload(@ModelAttribute MultiFileDomain multiFileDomain, HttpServletRequest request) {
        String realPath = request.getServletContext().getRealPath("uploadfiles");
        File targetDir = new File(realPath);
        if (!targetDir.exists()) {
            targetDir.mkdirs();
        }
        List<MultipartFile> files = multiFileDomain.getMyfile();
        for (int i = 0; i < files.size(); i++) {
            MultipartFile file = files.get(i);
            String fileName = file.getOriginalFilename();
            File targetFile = new File(realPath, fileName);
            try {
                file.transferTo(targetFile);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        logger.info("成功");
        return "showMulti";
    }
}
